package run.microservice.stock.response;

/**
 * 返回结果编码枚举类
 * @author lunfangyu
 */
public enum ResultEnum {

    /** 成功 */
    SUCCESS("00000", "成功"),

    /** 数据不存在 */
    DATA_NOT_EXISTS("D0000", "数据不存在。"),
    /** 数据不存在；带具体参数 */
    DATA_NOT_EXISTS_ARGS("D0001", "数据[id={}]不存在。"),
    /** 数据不存在 */
    DATA_EXISTS("D0002", "数据已存在。"),
    DUPLICATE_KEY("D0003", "唯一Key重复。"),

    /** P开头代表，参数错误；包括实体类字段校验等，都以P开头进行编码 */
    PARAM_ERROR("P0000", "参数错误"),
    /** 主键ID不能为空 */
    PRIMARY_ID_NOT_NULL("P0001", "主键ID不能为空"),
    DICT_CODE_NOT_NULL("P0002", "字典编码不能为空"),
    DICT_NAME_NOT_NULL("P0003", "字典描述不能为空"),
    MIN_ID_1000("P0004", "ID不能小于1000"),

    /** SQL错误 */
    SQL_ERROR("S0000", "SQL错误"),

    /** 测试错误 */
    TEST_ERROR("T0000", "错误测试：参数1：{}，参数2：{}，参数3：{}"),

    /** 系统错误：所有未知的或者未进行明确定义的系统错误或者异常，建议少用；异常捕获要明确错误 */
    ERROR("E9999", "系统错误");

    private String code;
    private String msg;
    ResultEnum(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return this.code;
    }

    public String getMsg() {
        return this.msg;
    }

    /**
     * 根据枚举编码获取枚举实例
     * @param code
     * @return
     */
    public static ResultEnum getInstance(String code) {
        for (ResultEnum resultEnum : ResultEnum.values()) {
            if (resultEnum.code.equals(code)) {
                return resultEnum;
            }
        }
        return null;
    }

}
